home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus 1997 #3 / Amiga Plus CD - 1997 - No. 03.iso / pd / programmierung / alienbreed3d2_src / cheesesauce / andy.lha / PLR2CONTROL.s < prev    next >
Text File  |  1995-09-13  |  10KB  |  676 lines

  1.  
  2. PLR2_mouse_control
  3.  jsr ReadMouse
  4.  jsr PLR2_alwayskeys
  5.  move.l #SineTable,a0
  6.  move.w PLR2s_angspd,d1
  7.  move.w angpos,d0
  8.  and.w #8190,d0
  9.  move.w d0,PLR2s_angpos
  10.  move.w (a0,d0.w),PLR2s_sinval
  11.  adda.w #2048,a0
  12.  move.w (a0,d0.w),PLR2s_cosval
  13.  
  14.  move.l PLR2s_xspdval,d6
  15.  move.l PLR2s_zspdval,d7
  16.  
  17.  neg.l d6
  18.  ble.s .nobug1
  19.  asr.l #1,d6
  20.  add.l #1,d6
  21.  bra.s .bug1
  22. .nobug1
  23.  asr.l #1,d6
  24. .bug1:
  25.  
  26.  neg.l d7
  27.  ble.s .nobug2
  28.  asr.l #1,d7
  29.  add.l #1,d7
  30.  bra.s .bug2
  31. .nobug2
  32.  asr.l #1,d7
  33. .bug2: 
  34.  
  35.  move.w ymouse,d3
  36.  sub.w oldymouse,d3
  37.  add.w d3,oldymouse
  38.  asr.w #1,d3
  39.  cmp.w #50,d3
  40.  ble.s .nofastfor
  41.  move.w #50,d3
  42. .nofastfor:
  43.  cmp.w #-50,d3
  44.  bge.s .nofastback
  45.  move.w #-50,d3
  46. .nofastback:
  47.  
  48.  tst.b PLR2_Ducked
  49.  beq.s .nohalve
  50.  asr.w #1,d3
  51. .nohalve
  52.  
  53.  move.w d3,d2
  54.  asl.w #4,d2
  55.  move.w d2,d1
  56.  
  57.  move.w d1,d2
  58.  add.w PLR2_bobble,d1
  59.  and.w #8190,d1
  60.  move.w d1,PLR2_bobble
  61.  add.w PLR2_clumptime,d2
  62.  move.w d2,d1
  63.  and.w #4095,d2
  64.  move.w d2,PLR2_clumptime
  65.  and.w #-4096,d1
  66.  beq.s .noclump
  67.  
  68.  bsr PLR2clump
  69.  
  70. .noclump
  71.  
  72.  
  73.  move.w PLR2s_sinval,d1
  74.  move.w PLR2s_cosval,d2
  75.  
  76.  move.w d2,d4
  77.  move.w d1,d5
  78.  muls lrs,d4
  79.  muls lrs,d5
  80.  
  81.  
  82.  muls d3,d2
  83.  muls d3,d1
  84.  sub.l d4,d1
  85.  add.l d5,d2
  86.  
  87.  sub.l d1,d6
  88.  sub.l d2,d7
  89.  add.l d6,PLR2s_xspdval
  90.  add.l d7,PLR2s_zspdval
  91.  move.l PLR2s_xspdval,d6
  92.  move.l PLR2s_zspdval,d7
  93.  add.l d6,PLR2s_xoff
  94.  add.l d7,PLR2s_zoff
  95.  
  96.  tst.b PLR2_fire
  97.  beq.s .firenotpressed
  98. ; fire was pressed last time.
  99.  btst #6,$bfe001
  100.  bne.s .firenownotpressed
  101. ; fire is still pressed this time.
  102.  st PLR2_fire
  103.  bra .donePLR2
  104.  
  105. .firenownotpressed:
  106. ; fire has been released.
  107.  clr.b PLR2_fire
  108.  bra .donePLR2
  109.  
  110. .firenotpressed
  111.  
  112. ; fire was not pressed last frame...
  113.  
  114.  btst #6,$bfe001
  115. ; if it has still not been pressed, go back above
  116.  bne.s .firenownotpressed
  117. ; fire was not pressed last time, and was this time, so has
  118. ; been clicked.
  119.  st PLR2_clicked
  120.  st PLR2_fire
  121.  
  122. .donePLR2:
  123.  
  124.  bsr PLR2_fall
  125.  
  126.  rts
  127.  
  128. PLR2_alwayskeys
  129.  move.l #KeyMap,a5
  130.  moveq #0,d7
  131.  move.b operate_key,d7
  132.  move.b (a5,d7.w),d1
  133.  beq.s .nottapped
  134.  tst.b OldSpace
  135.  bne.s .nottapped
  136.  st PLR2_SPCTAP
  137. .nottapped:
  138.  move.b d1,OldSpace
  139.  
  140.  move.b duck_key,d7
  141.  tst.b (a5,d7.w)
  142.  beq.s .notduck
  143.  clr.b (a5,d7.w)
  144.  move.l #playerheight,PLR2s_targheight
  145.  not.b PLR2_Ducked
  146.  beq.s .notduck
  147.  move.l #playercrouched,PLR2s_targheight
  148. .notduck:
  149.  
  150.  move.l PLR2_Roompt,a4
  151.  move.l ToZoneFloor(a4),d0
  152.  sub.l ToZoneRoof(a4),d0
  153.  tst.b PLR2_StoodInTop
  154.  beq.s .usebottom
  155.  move.l ToUpperFloor(a4),d0
  156.  sub.l ToUpperRoof(a4),d0
  157. .usebottom:
  158.  
  159.  cmp.l #playerheight+3*1024,d0
  160.  bgt.s .oktostand
  161.  st PLR2_Ducked
  162.  move.l #playercrouched,PLR2s_targheight
  163. .oktostand:
  164.  
  165.  move.l PLR2s_height,d0
  166.  move.l PLR2s_targheight,d1
  167.  cmp.l d1,d0
  168.  beq.s .noupordown
  169.  bgt.s .crouch
  170.  add.l #1024,d0
  171.  bra .noupordown
  172. .crouch:
  173.  sub.l #1024,d0
  174. .noupordown:
  175.  move.l d0,PLR2s_height
  176.  
  177.  tst.b $27(a5)
  178.  beq.s .notselkey
  179.  st PLR2KEYS
  180.  clr.b PLR2PATH
  181.  clr.b PLR2MOUSE
  182.  clr.b PLR2JOY
  183. .notselkey:
  184.  
  185.  tst.b $26(a5)
  186.  beq.s .notseljoy
  187.  clr.b PLR2KEYS
  188.  clr.b PLR2PATH
  189.  clr.b PLR2MOUSE
  190.  st PLR2JOY
  191. .notseljoy:
  192.  
  193.  tst.b $37(a5)
  194.  beq.s .notselmouse
  195.  clr.b PLR2KEYS
  196.  clr.b PLR2PATH
  197.  st PLR2MOUSE
  198.  clr.b PLR2JOY
  199. .notselmouse:
  200.  
  201.  lea 1(a5),a4
  202.  lea PLR2_GunData,a3
  203.  move.l #GUNVALS,a2
  204.  move.w #4,d1
  205. .pickweap
  206.  move.b (a2)+,d0    ; number of gun
  207.  tst.b (a4)+
  208.  beq.s .notgotweap
  209.  moveq #0,d2
  210.  move.b d0,d2
  211.  asl.w #5,d2
  212.  tst.b 7(a3,d2.w)
  213.  beq.s .notgotweap
  214.  move.b d0,PLR2_GunSelected
  215. .notgotweap
  216.  dbra d1,.pickweap
  217.  
  218.  tst.b $43(a5)
  219.  beq.s .notswapscr
  220.  tst.b lastscr
  221.  bne.s .notswapscr2
  222.  st lastscr
  223.  
  224.  not.b BIGsmall
  225.  beq.s .dosmall
  226.  
  227.  jsr putinlargescr
  228.  bra .notswapscr2
  229.  
  230. .dosmall:
  231.  jsr putinsmallscr
  232.  bra .notswapscr2
  233.  
  234. .notswapscr:
  235.  clr.b lastscr
  236. .notswapscr2:
  237.  
  238.  rts
  239.  
  240. PLR2_keyboard_control:
  241.  
  242.  move.l #SineTable,a0
  243.  
  244.  jsr PLR2_alwayskeys
  245.  move.l #KeyMap,a5
  246.  
  247.  move.w PLR2s_angpos,d0
  248.  move.w PLR2s_angspd,d3
  249.  move.w #35,d1
  250.  move.w #2,d2
  251.  moveq #0,d7
  252.  move.b run_key,d7
  253.  tst.b (a5,d7.w)
  254.  beq.s .nofaster
  255.  move.w #60,d1
  256.  move.w #3,d2
  257. .nofaster:
  258.  tst.b PLR2_Ducked
  259.  beq.s .nohalve
  260.  asr.w #1,d2
  261. .nohalve
  262.  
  263.  moveq #0,d4 
  264.  
  265.  move.w d3,d5
  266.  add.w d5,d5
  267.  add.w d5,d3
  268.  asr.w #2,d3
  269.  bge.s .nneg
  270.  addq #1,d3
  271. .nneg:
  272.  
  273.  move.b turn_left_key,templeftkey
  274.  move.b turn_right_key,temprightkey
  275.  move.b sidestep_left_key,tempslkey
  276.  move.b sidestep_right_key,tempsrkey
  277.  
  278.  move.b force_sidestep_key,d7
  279.  tst.b (a5,d7.w)
  280.  beq .noalwayssidestep
  281.  
  282.  move.b templeftkey,tempslkey
  283.  move.b temprightkey,tempsrkey
  284.  move.b #255,templeftkey
  285.  move.b #255,temprightkey
  286.  
  287. .noalwayssidestep:
  288.  
  289.  
  290.  move.b templeftkey,d7
  291.  tst.b (a5,d7.w)
  292.  beq.s .noleftturn
  293.  sub.w #10,d3
  294. .noleftturn
  295.  move.l #KeyMap,a5
  296.  move.b temprightkey,d7
  297.  tst.b (a5,d7.w)
  298.  beq.s .norightturn
  299.  add.w #10,d3
  300. .norightturn
  301.  
  302.  cmp.w d1,d3
  303.  ble.s .okrspd
  304.  move.w d1,d3
  305. .okrspd:
  306.  neg.w d1
  307.  cmp.w d1,d3
  308.  bge.s .oklspd
  309.  move.w d1,d3
  310. .oklspd:
  311.  
  312.  add.w d3,d0
  313.  add.w d3,d0
  314.  move.w d3,PLR2s_angspd
  315.  
  316.  move.b tempslkey,d7
  317.  tst.b (a5,d7.w)
  318.  beq.s .noleftslide
  319.  add.w d2,d4
  320.  add.w d2,d4
  321.  asr.w #1,d4
  322. .noleftslide
  323.  move.l #KeyMap,a5
  324.  move.b tempsrkey,d7
  325.  tst.b (a5,d7.w)
  326.  beq.s .norightslide
  327.  add.w d2,d4
  328.  add.w d2,d4
  329.  asr.w #1,d4
  330.  neg.w d4
  331. .norightslide
  332.   
  333. noslide2:
  334.   
  335.  and.w #8191,d0
  336.  move.w d0,PLR2s_angpos
  337.  
  338.  move.w (a0,d0.w),PLR2s_sinval
  339.  adda.w #2048,a0
  340.  move.w (a0,d0.w),PLR2s_cosval
  341.  
  342.  move.l PLR2s_xspdval,d6
  343.  move.l PLR2s_zspdval,d7
  344.  
  345.  neg.l d6
  346.  ble.s .nobug1
  347.  asr.l #3,d6
  348.  add.l #1,d6
  349.  bra.s .bug1
  350. .nobug1
  351.  asr.l #3,d6
  352. .bug1:
  353.  
  354.  neg.l d7
  355.  ble.s .nobug2
  356.  asr.l #3,d7
  357.  add.l #1,d7
  358.  bra.s .bug2
  359. .nobug2
  360.  asr.l #3,d7
  361. .bug2: 
  362.  
  363.  moveq #0,d3
  364.  
  365.  moveq #0,d5
  366.  move.b forward_key,d5
  367.  tst.b (a5,d5.w)
  368.  beq.s .noforward
  369.  neg.w d2
  370.  move.w d2,d3
  371.  
  372. .noforward:
  373.  move.b backward_key,d5
  374.  tst.b (a5,d5.w)
  375.  beq.s .nobackward
  376.  move.w d2,d3
  377. .nobackward:
  378.  
  379.  move.w d3,d2
  380.  asl.w #6,d2
  381.  move.w d2,d1
  382. ; add.w d2,d1
  383. ; add.w d2,d1
  384.  move.w d1,d2
  385.  add.w PLR2_bobble,d1
  386.  and.w #8190,d1
  387.  move.w d1,PLR2_bobble
  388.  add.w PLR2_clumptime,d2
  389.  move.w d2,d1
  390.  and.w #4095,d2
  391.  move.w d2,PLR2_clumptime
  392.  and.w #-4096,d1
  393.  beq.s .noclump
  394.  
  395.  bsr PLR2clump
  396.  
  397. .noclump
  398.  
  399.  
  400.  move.w PLR2s_sinval,d1
  401.  muls d3,d1
  402.  move.w PLR2s_cosval,d2
  403.  muls d3,d2
  404.  
  405.  sub.l d1,d6
  406.  sub.l d2,d7
  407.  move.w PLR2s_sinval,d1
  408.  muls d4,d1
  409.  move.w PLR2s_cosval,d2
  410.  muls d4,d2
  411.  sub.l d2,d6
  412.  add.l d1,d7
  413.  
  414.  add.l d6,PLR2s_xspdval
  415.  add.l d7,PLR2s_zspdval
  416.  move.l PLR2s_xspdval,d6
  417.  move.l PLR2s_zspdval,d7
  418.  add.l d6,PLR2s_xoff
  419.  add.l d7,PLR2s_zoff
  420.  
  421.  move.b fire_key,d5
  422.  tst.b PLR2_fire
  423.  beq.s .firenotpressed
  424. ; fire was pressed last time.
  425.  tst.b (a5,d5.w)
  426.  beq.s .firenownotpressed
  427. ; fire is still pressed this time.
  428.  st PLR2_fire
  429.  bra .doneplr2
  430.  
  431. .firenownotpressed:
  432. ; fire has been released.
  433.  clr.b PLR2_fire
  434.  bra .doneplr2
  435.  
  436. .firenotpressed
  437.  
  438. ; fire was not pressed last frame...
  439.  
  440.  tst.b (a5,d5.w)
  441. ; if it has still not been pressed, go back above
  442.  beq.s .firenownotpressed
  443. ; fire was not pressed last time, and was this time, so has
  444. ; been clicked.
  445.  st PLR2_clicked
  446.  st PLR2_fire
  447.  
  448. .doneplr2:
  449.  
  450.  bsr PLR2_fall
  451.  
  452.  
  453.  rts
  454.  
  455. PLR2_JoyStick_control:
  456.  
  457.  jsr _ReadJoy2
  458.  bra PLR2_keyboard_control
  459.  
  460.  move.l #KeyMap,a5
  461.  move.l #SineTable,a0
  462.  
  463.  btst #1,$dff00c
  464.  sne d0
  465.  btst #1,$dff00d
  466.  sne d1
  467.  btst #0,$dff00c
  468.  sne d2
  469.  btst #0,$dff00d
  470.  sne d3
  471.  moveq #0,d5
  472.  move.b fire_key,d5
  473.  btst #7,$bfe001
  474.  seq (a5,d5.w)
  475.  
  476.  move.b turn_left_key,d5
  477.  move.b d0,(a5,d5.w)
  478.  move.b turn_right_key,d5
  479.  move.b d1,(a5,d5.w)
  480.  eor.b d0,d2
  481.  move.b forward_key,d5
  482.  move.b d2,(a5,d5.w)
  483.  eor.b d1,d3
  484.  move.b backward_key,d5
  485.  move.b d3,(a5,d5.w)
  486.  
  487.  
  488.  bra PLR2_keyboard_control
  489.  
  490.  
  491.  jsr PLR2_alwayskeys
  492.  
  493.  move.w PLR2s_angpos,d0
  494.  move.w #70,d1
  495.  move.w #7,d2
  496.  tst.b $61(a5)
  497.  beq.s .nofaster
  498.  move.w #120,d1
  499.  move.w #10,d2
  500. .nofaster:
  501.  
  502.  tst.b PLR2_Ducked
  503.  beq.s .nohalve
  504.  asr.w #1,d2
  505. .nohalve:
  506.  
  507.  moveq #0,d4 
  508. ; tst.b $67(a5)
  509. ; bne.s slidelr
  510.  
  511.  tst.b $4f(a5)
  512.  beq.s .noleftturn
  513.  sub.w d1,d0
  514. .noleftturn
  515.  move.l #KeyMap,a5
  516.  tst.b $4e(a5)
  517.  beq.s .norightturn
  518.  add.w d1,d0
  519. .norightturn
  520. ; bra.s noslide
  521.  
  522. .slidelr:
  523.  tst.b $39(a5)
  524.  beq.s .noleftslide
  525.  move.w d2,d4
  526.  asr.w #1,d4
  527. .noleftslide
  528.  move.l #KeyMap,a5
  529.  tst.b $3a(a5)
  530.  beq.s .norightslide
  531.  sub.w d2,d4
  532.  asr.w #1,d4
  533. .norightslide
  534.   
  535. .noslide:
  536.   
  537.  and.w #8191,d0
  538.  move.w d0,PLR2s_angpos
  539.  
  540.  move.w (a0,d0.w),PLR2s_sinval
  541.  adda.w #2048,a0
  542.  move.w (a0,d0.w),PLR2s_cosval
  543.  
  544.  move.l PLR2s_xspdval,d6
  545.  move.l PLR2s_zspdval,d7
  546.  
  547.  neg.l d6
  548.  ble.s .nobug1
  549.  asr.l #1,d6
  550.  add.l #1,d6
  551.  bra.s .bug1
  552. .nobug1
  553.  asr.l #1,d6
  554. .bug1:
  555.  
  556.  neg.l d7
  557.  ble.s .nobug2
  558.  asr.l #1,d7
  559.  add.l #1,d7
  560.  bra.s .bug2
  561. .nobug2
  562.  asr.l #1,d7
  563. .bug2: 
  564.  
  565.  moveq #0,d3
  566.  
  567.  tst.b $4c(a5)
  568.  beq.s .noforward
  569.  neg.w d2
  570.  move.w d2,d3
  571. .noforward:
  572.  tst.b $4d(a5)
  573.  beq.s .nobackward
  574.  move.w d2,d3
  575. .nobackward:
  576.  
  577.  move.w d3,d2
  578.  asl.w #4,d2
  579.  move.w d2,d1
  580.  add.w d2,d1
  581.  add.w d2,d1
  582.  add.w PLR2_bobble,d1
  583.  and.w #8190,d1
  584.  move.w d1,PLR2_bobble
  585.  
  586.  move.w PLR2s_sinval,d1
  587.  muls d3,d1
  588.  move.w PLR2s_cosval,d2
  589.  muls d3,d2
  590.  
  591.  sub.l d1,d6
  592.  sub.l d2,d7
  593.  move.w PLR2s_sinval,d1
  594.  muls d4,d1
  595.  move.w PLR2s_cosval,d2
  596.  muls d4,d2
  597.  sub.l d2,d6
  598.  add.l d1,d7
  599.  
  600.  add.l d6,PLR2s_xspdval
  601.  add.l d7,PLR2s_zspdval
  602.  move.l PLR2s_xspdval,d6
  603.  move.l PLR2s_zspdval,d7
  604.  add.l d6,PLR2s_xoff
  605.  add.l d7,PLR2s_zoff
  606.  
  607.  tst.b PLR2_fire
  608.  beq.s .firenotpressed
  609. ; fire was pressed last time.
  610.  tst.b $65(a5)
  611.  beq.s .firenownotpressed
  612. ; fire is still pressed this time.
  613.  st PLR2_fire
  614.  bra .donePLR2
  615.  
  616. .firenownotpressed:
  617. ; fire has been released.
  618.  clr.b PLR2_fire
  619.  bra .donePLR2
  620.  
  621. .firenotpressed
  622.  
  623. ; fire was not pressed last frame...
  624.  
  625.  tst.b $65(a5)
  626. ; if it has still not been pressed, go back above
  627.  beq.s .firenownotpressed
  628. ; fire was not pressed last time, and was this time, so has
  629. ; been clicked.
  630.  st PLR2_clicked
  631.  st PLR2_fire
  632.  
  633. .donePLR2:
  634.  
  635.  bsr PLR2_fall
  636.  
  637.  rts
  638.  
  639. PLR2_clumptime: dc.w 0
  640.  
  641. PLR2clump:
  642.  
  643.  movem.l d0-d7/a0-a6,-(a7)
  644.  move.l PLR2_Roompt,a0
  645.  move.w ToFloorNoise(a0),d0
  646.  
  647.  move.l ToZoneWater(a0),d1
  648.  cmp.l ToZoneFloor(a0),d1
  649.  bge.s THERESNOWATER2
  650.  
  651.  cmp.l PLR2_yoff,d1
  652.  blt.s THERESNOWATER2
  653.  
  654.  move.w #6-23,d0
  655.  
  656. THERESNOWATER2:
  657.  
  658.  
  659.  tst.b PLR2_StoodInTop
  660.  beq.s .okinbot
  661.  move.w ToUpperFloorNoise(a0),d0
  662. .okinbot:
  663.  
  664.  add.w #23,d0
  665.  move.w d0,Samplenum
  666.  move.w #0,Noisex
  667.  move.w #100,Noisez
  668.  move.w #80,Noisevol
  669.  move.b #$f9,IDNUM
  670.  clr.b notifplaying
  671.  jsr MakeSomeNoise
  672.  
  673.  movem.l (a7)+,d0-d7/a0-a6
  674.  
  675.  rts
  676.